package com.github.rnewson.couchdb.lucene;

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.json.JSONObject;

public class GeneUseThreadPoll implements AbstractGeneration {

	// private boolean stop = true; //标志线程是否终止
	private String modification = "";
	private boolean stoped = false; // 标志本类所在线程是否以结束
	// Thread thread = null;
	String databasename = null;

	public void setDatabasename(String dbname) {
		this.databasename = dbname;
	}

	// public void setThread(Thread thread)
	// {
	// this.thread = thread;
	// }
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while (true) {
			if (modification.length() != 0) {
				if (!interGenerateWeb(modification)) {
					System.out.println("网站生成失败");
				} else {
					modification = ""; // 网页生成成功，把以前的网页内容清空
					break;
				}
			}
		}
		this.stoped = true; // 网页生成成功，本类所在线程结束标志stoped设置为false
	}

	public void initGeneration(String databasename)// 初始化网页生成线程，本类所在线程停止标志设为false，网页修改内容设为空
	{
		this.databasename = databasename;
		// stop = false;
		modification = "";
		this.stoped = true;
	}

	private boolean interGenerateWeb(String modification)// 内部使用的网页生成函数，把网页内容写入文件中
	{
		System.out.println(modification);
		// //////////////////////////////////////////////////////////////////////////////////
		// 使用数据库和文档ID确定一个网页的名称
		String webname = null;

		try {
			final JSONObject json = new JSONObject(modification);
			webname = json.getString("id");// 从json对象中把id的内容读出来
			webname = this.databasename + "  id:" + webname;
		} catch (final Exception e) {
			System.err.println("json转换错误");
		}

		try {
			// 获得当前日期时间
			SimpleDateFormat formatter = new SimpleDateFormat(
					"yyyy-MM-dd   hh:mm:ss");
			Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
			String date_y_M_d_h_m_s = formatter.format(curDate);

			formatter = new SimpleDateFormat("yyyy-MM-dd");
			String date_y_M_d = formatter.format(curDate);

			// 先写日志文件再写网页
			// 写日志文件
			String filename = new String(this.databasename);
			int last = filename.length() - 1;
			filename = filename.substring(0, last);
			filename = filename.replaceAll("http://", "");
			filename = filename.replaceAll(":", "_");
			filename = filename.replaceAll("/", "_");
			filename = filename + "_" + date_y_M_d + "_log";
			FileOutputStream out = new FileOutputStream("F:\\couchdb\\log\\"
					+ filename, true);
			// 获得当前日期时间
			// SimpleDateFormat formatter = new
			// SimpleDateFormat("yyyy-MM-dd   hh:mm:ss");
			// Date curDate = new Date(System.currentTimeMillis());//获取当前时间
			// String date = formatter.format(curDate);

			// 把当前时期时间和修改的网页文件名写入日志文件
			PrintStream p = new PrintStream(out);
			String record = date_y_M_d_h_m_s + "  " + webname + "   content: "
					+ modification + "/n";
			p.println(record);
			out.close();

			// 写网页
			final JSONObject json2 = new JSONObject(modification);
			String name = new String(this.databasename);
			last = name.length() - 1;
			name = name.substring(0, last);
			name = name.replaceAll("http://", "");
			name = name.replaceAll(":", "_");
			name = name.replaceAll("/", "_");
			out = new FileOutputStream("F:\\couchdb\\webs\\" + name + "_"
					+ json2.getString("id"));
			p = new PrintStream(out);
			record = modification;
			p.println(record);
			out.close();
		} catch (final Exception e) {
			System.err.println("文件操作错误");
		}

		// try{
		// thread.sleep(100000);
		// }
		// catch (final Exception e) {
		// System.err.println("线程睡眠错误");
		// }
		return true;
	}

	// public void stopThread(boolean stop)//终止本线程
	// {
	// this.stop = stop;
	// }

	public void setStoped(boolean stoped) {
		this.stoped = stoped;
	}

	public boolean getStoped() {
		return this.stoped;
	}

	// 外部使用的网页生成函数，把要生成的内容写入this.modification变量中。
	// run函数中会得到this.modification然后调用内部的网页生成函数执行实际
	// 的文件写操作，把要生成的网页内容写入文件中。生成网页前先把繁忙标志设为true
	public void generateWeb(String modification) {
		this.modification = modification;
	}
}
